package org.onebrick.android.helpers;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.support.annotation.NonNull;
import android.util.Log;
import org.onebrick.android.core.OneBrickMapRESTClient;
import org.onebrick.android.models.GeocodeResponse;
import java.io.IOException;
import java.util.List;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
public class GeoCodeHelper {
private static final String TAG = GeoCodeHelper.class.getSimpleName();
public static void getGeoCode(@NonNull Context context, @NonNull String address, @NonNull final GeoCoderCallback callback) {
try {
List<Address> geocodeMatches = new Geocoder(context).getFromLocationName(address, 1);
if (!geocodeMatches.isEmpty()) {
double latitude = geocodeMatches.get(0).getLatitude();
double longitude = geocodeMatches.get(0).getLongitude();
Log.d(TAG, "latitude: " + latitude);
Log.d(TAG, "longitude" + longitude);
callback.onResponse(latitude, longitude);
} else {
OneBrickMapRESTClient.getInstance().geocodeResponse(address, new Callback<GeocodeResponse>() {
@Override
public void success(GeocodeResponse geocodeResponse, Response response) {
if (geocodeResponse.isSuccess()) {
Log.d(TAG, "GeoResults: " + geocodeResponse.getLatitude());
Log.d(TAG, "GeoResults: " + geocodeResponse.getLongitude());
callback.onResponse(geocodeResponse.getLatitude(), geocodeResponse.getLongitude());
}
}
@Override
public void failure(RetrofitError error) {
Log.e(TAG, "GeocodeResponse: Failed to parse Geocode Response", error);
}
});
}
} catch (IOException e) {
Log.e("ERROR", "Error to retrieve geocode", e);
}
}
public interface GeoCoderCallback {
void onResponse(double latitude, double longitude);
}
}